package com.example.design.component;

import java.util.ArrayList;
import java.util.List;

/**
 * Composite（容器构件）
 * 它在组合结构中表示容器节点对象，容器节点包含子节点，其子节点可以是叶子节点，也可以是容器节点，它提供一个集合用于存储子节点，实现了在抽象构件中定义的行为，包括那些访问及管理子构件的方法，在其业务方法中可以递归调用其子节点的业务方法。
 */
public class Composite extends Component {
    private List<Component> list = new ArrayList<>();

    public Composite(String name) {
        super(name);
    }

    @Override
    public void add(Component component) {
        this.list.add(component);
    }

    @Override
    public void remove(Component component) {
        this.list.remove(component);
    }

    @Override
    public Component getChild(int depth) {
        return this.list.get(depth);
    }

    @Override
    public void print() {
        System.out.println("--");
        System.out.println(getName());
        for(Component component : list){
            component.print();
        }
    }

    @Override
    public String getName() {
        return super.getName();
    }
}
